package com.wk.code.wkserver.service;

import com.wk.code.wkserver.entity.SourceCode;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wk.code.wkserver.request.admin.AdminDemandRequest;
import com.wk.code.wkserver.request.admin.AdminSourceCodeRequest;
import com.wk.code.wkserver.request.admin.SourceCodeVerifyRequest;
import com.wk.code.wkserver.request.app.DemandVerifyRequest;
import com.wk.code.wkserver.request.app.SourceCodeRequest;
import com.wk.code.wkserver.request.base.BasePageRequest;
import com.wk.code.wkserver.response.admin.AdminSourceCodeDetailResponse;
import com.wk.code.wkserver.response.admin.DemandResponse;
import com.wk.code.wkserver.response.admin.SourceCodeResponse;
import com.wk.code.wkserver.response.app.AppSourceCodeResponse;
import com.wk.code.wkserver.response.app.SourceCodeDetailResponse;
import com.wk.code.wkserver.response.app.SourceCodeListResponse;
import com.wk.code.wkserver.response.base.PageInfo;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author wq
 * @since 2021-08-15
 */
public interface ISourceCodeService extends IService<SourceCode> {

    /**
     * 发布系统源码
     *
     * @param userId  用户ID
     * @param request 请求参数
     */
    void publish(Integer userId, SourceCodeRequest request);


    /**
     * 我的源码
     *
     * @return List<SourceCodeResponse>
     */
    List<AppSourceCodeResponse> mineSourceCode(Integer userId);

    /**
     * 码市列表
     *
     * @param request 参数
     * @return List<SourceCodeListResponse>
     */
    List<SourceCodeListResponse> marketList(BasePageRequest request);


    /**
     * 审核源码
     *
     * @param request request
     */
    void verifySourceCode(Integer sysUserId, SourceCodeVerifyRequest request);


    /**
     * 后台需求详情
     *
     * @param id ID
     * @return AdminSourceCodeDetailResponse
     */
    AdminSourceCodeDetailResponse adminDetail(Integer id);

    /**
     * 详情
     *
     * @param id ID
     * @return SourceCodeDetailResponse
     */
    SourceCodeDetailResponse detail(Integer id);


    /**
     * admin 源码系统列表
     *
     * @param request 请求参数
     * @return DemandResponse
     */
    PageInfo<SourceCodeResponse> page(AdminSourceCodeRequest request);

    /**
     * 查询源码数量
     *
     * @param userId 用户ID
     * @return Integer
     */
    Integer selectUserCodeCount(Integer userId);

    /**
     * 更新浏览量
     *
     * @param id id
     */
    void updateViewCount(Integer id);

    /**
     * 删除源码
     *
     * @param sourceCodeId 源码ID
     * @param userId       用户ID
     */
    void deleteSourceCode(Integer sourceCodeId, Integer userId);
}
